package uilayer;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;
import javax.swing.border.EtchedBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

import modellayer.Ansat;
import modellayer.FastKunde;
import modellayer.Kunde;
import modellayer.Medarbejder;
import ctrlayer.PersonCtr;


public class PersonGUI extends JFrame {

	private PersonCtr pCtr;
	private static PersonGUI pGUI;
	private JPanel contentPane;
	private JPanel panel;
	private JComboBox <String> comboBox;
	private MainMenuGUI mGUI;
	private JButton btnOpretKundeMenu;
	private JButton btnMainMenu;
	private JButton btnFindKundeMenu;
	private JButton btnOpretAnsatMenu;
	private JButton btnFindAnsatMenu;
	private JButton btnOpretKunde;
	private JLabel lblNavn;
	private JLabel lblAdresse;
	private JLabel lblPostnummer;
	private JLabel lblBy;
	private JLabel lblTelefonNummer;
	private JLabel lblEmail;
	private JLabel lblKundegruppe;
	private JTextField txtTlf;
	private JTextField txtBy;
	private JTextField txtEmail;
	private JTextField txtPostnr;
	private JTextField txtAdresse;
	private JTextField txtNavn;
	private JTextField txtKontonr;
	private JLabel lblKontoNummer;
	private JRadioButton rdbtnFastKunde;
	private JComboBox<Integer> cbKundegruppe;
	private JLabel lblTlffejl;
	private JLabel lblKundeOprettet;
	private JLabel lblKundeTlfFindes;
	private JLabel lblSgnavn;
	private JTextField txtSgnavn;
	private JTextField txtSgtlf;
	private JLabel lblSgtlf;
	private JButton btnSgKunde;
	private DefaultTableModel model;
	private JButton btnSletkunde;
	private JLabel lblKundeikkefundet;
	private JTable table;
	private JScrollPane scrollPane;
	private JButton btnRetkunde;
	private JLabel lblKundeslettet;
	private JLabel lblKunderettet;
	private JLabel lblNeednavn;
	private JLabel lblAnsatTlfFindes;
	private JRadioButton rdbtnLeder;
	private JLabel lblAnsatOprettet;
	private JButton btnOpretAnsat;
	private JLabel lblSgMedarbejderNr;
	private JTextField txtSgMedarbejderNr;
	private JComponent lblAnsatikkefundet;
	private JButton btnSgAnsat;
	private JScrollPane scrollPane_1;
	private JTable table_1;
	private DefaultTableModel model_1;
	private JLabel lblAnsatslettet;
	private JLabel lblAnsatrettet;
	private JButton btnRetAnsat;
	private JLabel lblAnsatNrfejl;
	private JButton btnSletAnsat;
	private Ansat bruger;
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					PersonGUI frame = new PersonGUI();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public PersonGUI() {
		pCtr = new PersonCtr();
		loadAnsatte();
		loadKunder();
		if(getBruger() == null)
		{
			setBruger(findAnsat(1));
			bruger = getBruger();
		}
		else
		{
			bruger = getBruger();
		}
		setTitle("Person Menu - logget ind som " + bruger.getNavn());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 1720, 880);
		contentPane = new JPanel();
		contentPane.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		/**
		 * Person Menu
		 */
		
		comboBox = new JComboBox<String>();
		comboBox.addItem("Kunder");
		comboBox.addItem("Ansatte");
		comboBox.setBounds(10, 20, 150, 40);
		contentPane.add(comboBox);
		comboBox.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String selectedPerson = (String) comboBox.getSelectedItem();
				
				if (selectedPerson.equals("Ansatte"))
				{
					contentPane.removeAll();
					panel.removeAll();
					contentPane.add(panel);
					contentPane.add(comboBox);
					contentPane.add(btnOpretAnsatMenu);
					contentPane.add(btnFindAnsatMenu);
					contentPane.add(btnMainMenu);
					contentPane.revalidate();
					contentPane.repaint();
				}
				
				else if (selectedPerson.equals("Kunder"))
				{
					contentPane.removeAll();
					panel.removeAll();
					contentPane.add(panel);
					contentPane.add(comboBox);
					contentPane.add(btnOpretKundeMenu);
					contentPane.add(btnFindKundeMenu);
					contentPane.add(btnMainMenu);
					contentPane.revalidate();
					contentPane.repaint();
				}				
			}
		});
		
		panel = new JPanel();
		panel.setBounds(169, 20, 1520, 800);
		contentPane.add(panel);
		panel.setLayout(null);
		
		btnOpretKundeMenu = new JButton("Opret kunde");
		btnOpretKundeMenu.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				panel.removeAll();
				panel.add(rdbtnFastKunde);
				panel.add(btnOpretKunde);
				panel.add(lblNavn);
				panel.add(txtNavn);
				panel.add(lblAdresse);
				panel.add(txtAdresse);
				panel.add(lblPostnummer);
				panel.add(txtPostnr);
				panel.add(lblBy);
				panel.add(txtBy);
				panel.add(lblTelefonNummer);
				panel.add(txtTlf);
				panel.add(lblEmail);
				panel.add(txtEmail);
				panel.add(lblKontoNummer);
				panel.add(txtKontonr);
				panel.add(lblKundegruppe);
				panel.add(cbKundegruppe);
				panel.add(lblKundeTlfFindes);
				panel.add(lblNeednavn);
				panel.add(lblKundeOprettet);
				panel.add(lblTlffejl);
				
				lblKontoNummer.setVisible(false);
				txtKontonr.setVisible(false);
				lblKundegruppe.setVisible(false);
				cbKundegruppe.setVisible(false);
				lblKundeTlfFindes.setVisible(false);
				lblNeednavn.setVisible(false);
				lblKundeOprettet.setVisible(false);
				lblTlffejl.setVisible(false);
				panel.revalidate();
				panel.repaint();
			}
		});
		btnOpretKundeMenu.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnOpretKundeMenu.setBounds(10, 70, 150, 40);
		contentPane.add(btnOpretKundeMenu);
		
		btnFindKundeMenu = new JButton("Find kunde");
		btnFindKundeMenu.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				panel.removeAll();
				panel.add(lblSgnavn);
				panel.add(txtSgnavn);
				panel.add(lblSgtlf);
				panel.add(txtSgtlf);
				panel.add(btnSgKunde);
				panel.add(lblKundeikkefundet);
				panel.add(btnSletkunde);
				panel.add(btnRetkunde);
				panel.add(scrollPane);
				panel.add(lblKundeslettet);
				panel.add(lblKunderettet);
				model.setRowCount(0);
				
				lblKundeikkefundet.setVisible(false);
				btnSletkunde.setVisible(false);
				btnRetkunde.setVisible(false);
				lblKundeslettet.setVisible(false);
				lblKunderettet.setVisible(false);
				panel.revalidate();
				panel.repaint();
			}
		});
		btnFindKundeMenu.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnFindKundeMenu.setBounds(10, 120, 150, 40);
		contentPane.add(btnFindKundeMenu);
		
		btnOpretAnsatMenu = new JButton("Opret ansat");
		btnOpretAnsatMenu.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				panel.removeAll();
				panel.add(rdbtnLeder);
				panel.add(btnOpretAnsat);
				panel.add(lblNavn);
				panel.add(txtNavn);
				panel.add(lblAdresse);
				panel.add(txtAdresse);
				panel.add(lblPostnummer);
				panel.add(txtPostnr);
				panel.add(lblBy);
				panel.add(txtBy);
				panel.add(lblTelefonNummer);
				panel.add(txtTlf);
				panel.add(lblEmail);
				panel.add(txtEmail);
				panel.add(lblAnsatTlfFindes);
				panel.add(lblAnsatOprettet);
				panel.add(lblTlffejl);
				
				lblAnsatTlfFindes.setVisible(false);
				lblAnsatOprettet.setVisible(false);
				lblTlffejl.setVisible(false);
				panel.revalidate();
				panel.repaint();				
			}
		});
		btnOpretAnsatMenu.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnOpretAnsatMenu.setBounds(10, 70, 150, 40);
		contentPane.add(btnOpretAnsatMenu);
		
		btnFindAnsatMenu = new JButton("Find ansat");
		btnFindAnsatMenu.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				panel.removeAll();
				panel.add(lblSgMedarbejderNr);
				panel.add(txtSgMedarbejderNr);
				panel.add(lblSgtlf);
				panel.add(txtSgtlf);
				panel.add(btnSgAnsat);
				panel.add(lblAnsatikkefundet);
				panel.add(btnSletAnsat);
				panel.add(btnRetAnsat);
				panel.add(scrollPane_1);
				panel.add(lblAnsatslettet);
				panel.add(lblAnsatrettet);
				model_1.setRowCount(0);
				
				lblAnsatikkefundet.setVisible(false);
				btnSletAnsat.setVisible(false);
				btnRetAnsat.setVisible(false);
				lblAnsatslettet.setVisible(false);
				lblAnsatrettet.setVisible(false);
				panel.revalidate();
				panel.repaint();
			}
		});
		btnFindAnsatMenu.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnFindAnsatMenu.setBounds(10, 120, 150, 40);
		contentPane.add(btnFindAnsatMenu);
		
		btnMainMenu = new JButton("Tilbage");
		btnMainMenu.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnMainMenu.setBounds(10, 270, 150, 40);
		contentPane.add(btnMainMenu);
		btnMainMenu.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dispose();
				mGUI.main(null);
			}
		});
		
		/**
		 * Opret Kunde
		 */
				
		btnOpretKunde = new JButton("Opret");
		btnOpretKunde.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnOpretKunde.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(rdbtnFastKunde.isSelected())
				{
					if(pCtr.createFastKunde(txtNavn.getText(), txtAdresse.getText(), txtPostnr.getText(), txtBy.getText(), txtTlf.getText(), txtEmail.getText(), Long.parseLong(txtKontonr.getText()), cbKundegruppe.getSelectedIndex() + 1) == false)
					{
						txtTlf.setText(""); 
						lblTlffejl.setVisible(false);
						lblKundeTlfFindes.setVisible(true);
					}
					else
					{
						txtNavn.setText("");
						txtAdresse.setText("");
						txtPostnr.setText("");
						txtBy.setText("");
						txtTlf.setText("");
						txtEmail.setText("");
						txtKontonr.setText("");
						lblKundeOprettet.setVisible(true);
						save();
					}
					
				}
				else if(txtNavn.getText().isEmpty())
				{
					lblNeednavn.setVisible(true);
				}
				else if(txtTlf.getText().isEmpty())
				{
					lblTlffejl.setVisible(true);
				}
				else
				{
					if(pCtr.createKunde(txtNavn.getText(), txtAdresse.getText(), txtPostnr.getText(), txtBy.getText(), txtTlf.getText(), txtEmail.getText()) == false)
					{
						txtTlf.setText(""); 
						lblTlffejl.setVisible(false);
						lblKundeTlfFindes.setVisible(true);
					}
					else
					{
						txtNavn.setText("");
						txtAdresse.setText("");
						txtPostnr.setText("");
						txtBy.setText("");
						txtTlf.setText("");
						txtEmail.setText("");
						txtKontonr.setText("");
						lblKundeOprettet.setVisible(true);
						save();
					}
				}
			}
		});
		btnOpretKunde.setBounds(25, 300, 150, 40);
		
		lblNeednavn = new JLabel("Kan ikke lave en kunde uden navn!");
		lblNeednavn.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblNeednavn.setBounds(344, 57, 208, 14);
		
		lblKontoNummer = new JLabel("Kontonummer");
		lblKontoNummer.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblKontoNummer.setBounds(25, 224, 126, 16);
		
		txtKontonr = new JTextField();
		txtKontonr.setBounds(200, 218, 134, 28);
		
		lblKundegruppe = new JLabel("Kundegruppe");
		lblKundegruppe.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblKundegruppe.setBounds(25, 252, 103, 20);
		
		cbKundegruppe = new JComboBox<Integer>();
		cbKundegruppe.setFont(new Font("Tahoma", Font.PLAIN, 16));
		for(int i = 1; i < 23; i++)
		{
		cbKundegruppe.addItem(i);
		}
		cbKundegruppe.setBounds(200, 248, 69, 28);
		
		lblKundeTlfFindes = new JLabel("Der findes allerede en kunde med dette telefonnummer!");
		lblKundeTlfFindes.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblKundeTlfFindes.setBounds(346, 168, 365, 16);
		
		rdbtnFastKunde = new JRadioButton("Fast Kunde");
		rdbtnFastKunde.setFont(new Font("Tahoma", Font.PLAIN, 16));
		rdbtnFastKunde.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				FastKundeButtonChanged();
			}
		});
		rdbtnFastKunde.setBounds(25, 21, 141, 23);
		
		lblKundeOprettet = new JLabel("Kunde er oprettet");
		lblKundeOprettet.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblKundeOprettet.setBounds(58, 351, 117, 14);
		
		/**
		 * Find Kunde
		 */
		
		lblSgnavn = new JLabel("Navn");
		lblSgnavn.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblSgnavn.setBounds(25, 56, 61, 16);
		
		txtSgnavn = new JTextField();
		txtSgnavn.setBounds(191, 52, 134, 28);
		txtSgnavn.setColumns(10);
		
		lblSgtlf = new JLabel("Telefonnummer");
		lblSgtlf.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblSgtlf.setBounds(25, 95, 126, 16);
		
		txtSgtlf = new JTextField();
		txtSgtlf.setBounds(163, 90, 134, 28);
		txtSgtlf.setColumns(10);
		
		lblKundeikkefundet = new JLabel("Kunden kunne ikke findes");
		lblKundeikkefundet.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblKundeikkefundet.setBounds(25, 197, 150, 16);
		
		btnSgKunde = new JButton("Søg");
		btnSgKunde.addActionListener(new ActionListener() 
		{
			public void actionPerformed(ActionEvent arg0) 
			{
				lblKundeslettet.setVisible(false);
				lblKunderettet.setVisible(false);
				btnRetkunde.setVisible(false);
				btnSletkunde.setVisible(false);
				
				if(txtSgnavn.getText().equals("") && txtSgtlf.getText().equals(""))
				{
					sletTabel();				
					for(int i = 0; i < pCtr.getKundeList().size(); i++)
					{	
						if(pCtr.getKundeList().get(i) instanceof FastKunde)
						{
							model.addRow(new Object[] {pCtr.getKundeList().get(i).getNavn(), pCtr.getKundeList().get(i).getAdresse(), pCtr.getKundeList().get(i).getPostnr(), pCtr.getKundeList().get(i).getBy(), pCtr.getKundeList().get(i).getTlf(), pCtr.getKundeList().get(i).getEmail(), ((FastKunde)pCtr.getKundeList().get(i)).getKontonr(), ((FastKunde)pCtr.getKundeList().get(i)).getKundegrp() });
						}						
						else
						{
							model.addRow(new Object[] {pCtr.getKundeList().get(i).getNavn(), pCtr.getKundeList().get(i).getAdresse(), pCtr.getKundeList().get(i).getPostnr(), pCtr.getKundeList().get(i).getBy(), pCtr.getKundeList().get(i).getTlf(), pCtr.getKundeList().get(i).getEmail(), 0, 0 });
						}
						txtSgnavn.setText("");
						txtSgtlf.setText("");
						btnSletkunde.setVisible(false);
						btnRetkunde.setVisible(false);
						lblKundeikkefundet.setVisible(false);
					}			
				}
				else if(txtSgnavn.getText().equals("") && pCtr.findKunde(txtSgtlf.getText()) != null)
				{	
					sletTabel();
					lblKundeikkefundet.setVisible(false);
					Kunde kt = pCtr.findKunde(txtSgtlf.getText());
					String tlf = kt.getTlf();
					txtSgnavn.setText("");
					txtSgtlf.setText("");
					btnSletkunde.setVisible(true);
					btnRetkunde.setVisible(true);
					{
						if(kt instanceof FastKunde)
						{
							model.addRow(new Object[]{pCtr.findKunde(tlf).getNavn(), pCtr.findKunde(tlf).getAdresse(), pCtr.findKunde(tlf).getPostnr(), pCtr.findKunde(tlf).getBy(), pCtr.findKunde(tlf).getTlf(), pCtr.findKunde(tlf).getEmail(), ((FastKunde)pCtr.findKunde(tlf)).getKontonr(), ((FastKunde)pCtr.findKunde(tlf)).getKundegrp() });
						}
						else
						{
							model.addRow(new Object[]{pCtr.findKunde(tlf).getNavn(), pCtr.findKunde(tlf).getAdresse(), pCtr.findKunde(tlf).getPostnr(), pCtr.findKunde(tlf).getBy(), pCtr.findKunde(tlf).getTlf(), pCtr.findKunde(tlf).getEmail(), 0, 0 });
						}	
					}
				}
				else if(txtSgtlf.getText().equals("") && pCtr.findKundeViaNavn(txtSgnavn.getText()) != null)
				{
					sletTabel();
					pCtr.findKundeViaNavn(txtSgnavn.getText());
					int size = pCtr.findKunderList().size();
					lblKundeikkefundet.setVisible(false);
					txtSgnavn.setText("");
					txtSgtlf.setText("");
					for(int i = 0; i < size; i++)
					{
						if(pCtr.findKunderList().get(i) instanceof FastKunde)
						{
							model.addRow(new Object[]{pCtr.findKunderList().get(i).getNavn(), pCtr.findKunderList().get(i).getAdresse(), pCtr.findKunderList().get(i).getPostnr(), pCtr.findKunderList().get(i).getBy(), pCtr.findKunderList().get(i).getTlf(), pCtr.findKunderList().get(i).getEmail(), ((FastKunde)pCtr.findKunderList().get(i)).getKontonr(), ((FastKunde)pCtr.findKunderList().get(i)).getKundegrp() });
						}
						else
						{
							model.addRow(new Object[]{pCtr.findKunderList().get(i).getNavn(), pCtr.findKunderList().get(i).getAdresse(), pCtr.findKunderList().get(i).getPostnr(), pCtr.findKunderList().get(i).getBy(), pCtr.findKunderList().get(i).getTlf(), pCtr.findKunderList().get(i).getEmail(), 0, 0 });
						}	
					}
				}
				else
				{
					sletTabel();
					txtSgnavn.setText("");
					txtSgtlf.setText("");
					lblKundeikkefundet.setVisible(true);
					btnSletkunde.setVisible(false);
					btnRetkunde.setVisible(false);
				}
			}					
		});
		btnSgKunde.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnSgKunde.setBounds(19, 146, 150, 40);
		
		scrollPane = new JScrollPane();
		scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPane.setBounds(494, 13, 1014, 774);
		
		
		model = new DefaultTableModel( new Object[][] {}, new String[] {"Navn", "Adresse", "Postnummer", "By", "Telefonnummer", "E-mail", "Kontonummer", "Kundegruppe"});
		
		table = new JTable(model) 
		{
			Class[] columnTypes = new Class[] {
				String.class, String.class, String.class, String.class, String.class, String.class, Long.class, Integer.class
			};
			public Class getColumnClass(int columnIndex) {
				return columnTypes[columnIndex];
			}
		};
		table.getColumnModel().getColumn(0).setPreferredWidth(90);
		table.getColumnModel().getColumn(1).setPreferredWidth(90);
		table.getColumnModel().getColumn(2).setPreferredWidth(90);
		table.getColumnModel().getColumn(3).setPreferredWidth(90);
		table.getColumnModel().getColumn(4).setPreferredWidth(90);
		table.getColumnModel().getColumn(5).setPreferredWidth(90);
		table.getColumnModel().getColumn(6).setPreferredWidth(90);
		table.getColumnModel().getColumn(7).setPreferredWidth(90);
		table.setFont(new Font("Tahoma", Font.PLAIN, 16));
		table.setRowHeight(20);
		table.getTableHeader().setFont(new Font("Tahoma", Font.PLAIN, 16));
		scrollPane.setViewportView(table);
	
		DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();		
		rightRenderer.setHorizontalAlignment(SwingConstants.CENTER);
		for(int i = 0; i < table.getColumnCount(); i++)
		{
			table.getColumnModel().getColumn(i).setCellRenderer(rightRenderer);
		}
		
		/**
		 * Ret Kunde
		 */
		btnRetkunde = new JButton("Ret kunde");
		btnRetkunde.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String navn = table.getValueAt(0, 0).toString();
				String adresse = table.getValueAt(0, 1).toString();
				String postnr = table.getValueAt(0, 2).toString();
				String by = table.getValueAt(0, 3).toString();
				String tlf = table.getValueAt(0, 4).toString();
				String email = table.getValueAt(0, 5).toString();
				Long kontonr  = Long.parseLong(table.getValueAt(0, 6).toString());
				int kundegrp = Integer.parseInt(table.getValueAt(0, 7).toString());
				
				pCtr.findKunde(tlf).setNavn(navn);
				pCtr.findKunde(tlf).setAdresse(adresse);
				pCtr.findKunde(tlf).setPostnr(postnr);
				pCtr.findKunde(tlf).setBy(by);
				pCtr.findKundeViaNavn(navn).setTlf(tlf);
				pCtr.findKunde(tlf).setEmail(email);
				if(pCtr.findKunde(tlf) instanceof FastKunde)
				{
					((FastKunde)pCtr.findKunde(tlf)).setKontonr(kontonr);
					((FastKunde)pCtr.findKunde(tlf)).setKundegrp(kundegrp);
				}
				else
				{
					pCtr.konverterKunde(tlf, kontonr, kundegrp);
				}
				lblKunderettet.setVisible(true);
				save();				
			}
		});
		btnRetkunde.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnRetkunde.setBounds(339, 146, 150, 40);
		
		lblKunderettet = new JLabel("Kunden er rettet");
		lblKunderettet.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblKunderettet.setBounds(356, 209, 126, 20);
		
		/**
		 * Slet kunde
		 */
		
		btnSletkunde = new JButton("Slet kunde");
		btnSletkunde.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				JFrame parent = new JFrame();
				String slet = "Slet kunde " + table.getModel().getValueAt(0, 0);
				int valg = JOptionPane.showConfirmDialog(parent, "Er du sikker?", slet, JOptionPane.YES_NO_OPTION);
				if(valg == 0)
				{
					pCtr.deleteKunde(table.getValueAt(0, 4).toString());
					lblKundeslettet.setVisible(true);
					save();
				}
			}
		});
		btnSletkunde.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnSletkunde.setBounds(179, 146, 150, 40);
		
		lblKundeslettet = new JLabel("Kunden er slettet");
		lblKundeslettet.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblKundeslettet.setBounds(196, 209, 150, 20);
		
		/**
		 * Opret Ansat
		 */
		btnOpretAnsat = new JButton("Opret");
		btnOpretAnsat.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(rdbtnLeder.isSelected())
				{
					if(pCtr.createLeder(txtNavn.getText(), txtAdresse.getText(), txtPostnr.getText(), txtBy.getText(), txtTlf.getText(), txtEmail.getText()) == false)
					{
						txtTlf.setText("");
						lblTlffejl.setVisible(false);
						lblAnsatTlfFindes.setVisible(true);
					}
					else
					{
						txtNavn.setText("");
						txtAdresse.setText("");
						txtPostnr.setText("");
						txtBy.setText("");
						txtTlf.setText("");
						txtEmail.setText("");
						lblAnsatOprettet.setVisible(true);
						save();
					}
				}
				else if(txtTlf.getText().isEmpty())
				{
					lblTlffejl.setVisible(true);
				}
				else
				{
					if(pCtr.createMedarbejder(txtNavn.getText(), txtAdresse.getText(), txtPostnr.getText(), txtBy.getText(), txtTlf.getText(), txtEmail.getText()) == false)
					{
						txtTlf.setText(""); 
						lblTlffejl.setVisible(false);
						lblAnsatTlfFindes.setVisible(true);
					}
					else
					{
						txtNavn.setText("");
						txtAdresse.setText("");
						txtPostnr.setText("");
						txtBy.setText("");
						txtTlf.setText("");
						txtEmail.setText("");
						lblAnsatOprettet.setVisible(true);
						save();
					}
				}
			}
		});
		btnOpretAnsat.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnOpretAnsat.setBounds(25, 300, 150, 40);
		
		lblAnsatTlfFindes = new JLabel("Der findes allerede en medarbejder med dette telefonnummer!");
		lblAnsatTlfFindes.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblAnsatTlfFindes.setBounds(346, 168, 365, 16);
		
		rdbtnLeder = new JRadioButton("Leder");
		rdbtnLeder.setFont(new Font("Tahoma", Font.PLAIN, 16));
		rdbtnLeder.setBounds(25, 21, 141, 23);
		
		lblAnsatOprettet = new JLabel("Medarbejder er oprettet");
		lblAnsatOprettet.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblAnsatOprettet.setBounds(34, 351, 147, 14);
				
		/**
		 * Find Ansat
		 */
		
		lblSgMedarbejderNr = new JLabel("Medarbejdernummer");
		lblSgMedarbejderNr.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblSgMedarbejderNr.setBounds(25, 56, 156, 16);
		
		txtSgMedarbejderNr = new JTextField();
		txtSgMedarbejderNr.addFocusListener(new FocusAdapter() {
			@Override
			public void focusLost(FocusEvent arg0) {
				checkMedarbejderNr();
			}
		});
		txtSgMedarbejderNr.setBounds(191, 52, 134, 28);
		txtSgMedarbejderNr.setColumns(10);
		
		lblSgtlf = new JLabel("Telefonnummer");
		lblSgtlf.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblSgtlf.setBounds(25, 95, 126, 16);
		
		txtSgtlf = new JTextField();
		txtSgtlf.setBounds(191, 89, 134, 28);
		txtSgtlf.setColumns(10);
		
		lblAnsatikkefundet = new JLabel("Medarbejderen kunne ikke findes");
		lblAnsatikkefundet.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblAnsatikkefundet.setBounds(25, 197, 198, 16);
		
		btnSgAnsat = new JButton("Søg");
		btnSgAnsat.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				lblAnsatslettet.setVisible(false);
				lblAnsatrettet.setVisible(false);
				btnRetAnsat.setVisible(false);
				btnSletAnsat.setVisible(false);					
				if(txtSgMedarbejderNr.getText().equals("") && txtSgtlf.getText().equals(""))
				{
					sletTabel_1();				
					for(int i = 0; i < pCtr.getAnsatList().size(); i++)
					{							
						model_1.addRow(new Object[] {pCtr.getAnsatList().get(i).getMedarbejderNr(), pCtr.getAnsatList().get(i).getNavn(), pCtr.getAnsatList().get(i).getAdresse(), pCtr.getAnsatList().get(i).getPostnr(), pCtr.getAnsatList().get(i).getBy(), pCtr.getAnsatList().get(i).getTlf(), pCtr.getAnsatList().get(i).getEmail() });						
						
						txtSgMedarbejderNr.setText("");
						txtSgtlf.setText("");
						btnSletAnsat.setVisible(false);
						btnRetAnsat.setVisible(false);
						lblAnsatikkefundet.setVisible(false);
					}			
				}
				else if(txtSgMedarbejderNr.getText().equals("") && pCtr.findAnsatViaTlf(txtSgtlf.getText()) != null)
				{	
					sletTabel_1();
					lblAnsatikkefundet.setVisible(false);
					Ansat at = pCtr.findAnsatViaTlf(txtSgtlf.getText());
					String tlf = at.getTlf();
					txtSgMedarbejderNr.setText("");
					txtSgtlf.setText("");
					{
						model_1.addRow(new Object[]{pCtr.findAnsatViaTlf(tlf).getMedarbejderNr(), pCtr.findAnsatViaTlf(tlf).getNavn(), pCtr.findAnsatViaTlf(tlf).getAdresse(), pCtr.findAnsatViaTlf(tlf).getPostnr(), pCtr.findAnsatViaTlf(tlf).getBy(), pCtr.findAnsatViaTlf(tlf).getTlf(), pCtr.findAnsatViaTlf(tlf).getEmail() });					
					}
				}
				else if(txtSgtlf.getText().equals("") && pCtr.findAnsat(Integer.parseInt(txtSgMedarbejderNr.getText())) != null)
				{
					sletTabel_1();
					lblAnsatikkefundet.setVisible(false);
					Ansat am = pCtr.findAnsat(Integer.parseInt(txtSgMedarbejderNr.getText()));
					int medarbejderNr = am.getMedarbejderNr();
					txtSgMedarbejderNr.setText("");
					txtSgtlf.setText("");
					btnSletAnsat.setVisible(true);
					btnRetAnsat.setVisible(true);
					if(bruger instanceof Medarbejder)
					{
						btnSletAnsat.setEnabled(false);
						btnRetAnsat.setEnabled(false);
					}
					
					model_1.addRow(new Object[]{pCtr.findAnsat(medarbejderNr).getMedarbejderNr(), pCtr.findAnsat(medarbejderNr).getNavn(), pCtr.findAnsat(medarbejderNr).getAdresse(), pCtr.findAnsat(medarbejderNr).getPostnr(), pCtr.findAnsat(medarbejderNr).getBy(), pCtr.findAnsat(medarbejderNr).getTlf(), pCtr.findAnsat(medarbejderNr).getEmail() });
				}
				else
				{
					sletTabel_1();
					txtSgMedarbejderNr.setText("");
					txtSgtlf.setText("");
					lblAnsatikkefundet.setVisible(true);
					btnSletAnsat.setVisible(false);
					btnRetAnsat.setVisible(false);
				}
			}
		});
		btnSgAnsat.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnSgAnsat.setBounds(19, 146, 150, 40);
		
		scrollPane_1 = new JScrollPane();
		scrollPane_1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPane_1.setBounds(494, 13, 1014, 774);
		
		model_1 = new DefaultTableModel( new Object[][] {}, new String[] {"Medarbejdernummer", "Navn", "Adresse", "Postnummer", "By", "Telefonnummer", "E-mail"});
		
		table_1 = new JTable(model_1) 
		{
			Class[] columnTypes = new Class[] {
				Integer.class, String.class, String.class, String.class, String.class, String.class, String.class
			};
			public Class getColumnClass(int columnIndex) {
				return columnTypes[columnIndex];
			}
		};
		table_1.getColumnModel().getColumn(0).setPreferredWidth(90);
		table_1.getColumnModel().getColumn(1).setPreferredWidth(90);
		table_1.getColumnModel().getColumn(2).setPreferredWidth(90);
		table_1.getColumnModel().getColumn(3).setPreferredWidth(90);
		table_1.getColumnModel().getColumn(4).setPreferredWidth(90);
		table_1.getColumnModel().getColumn(5).setPreferredWidth(90);
		table_1.getColumnModel().getColumn(6).setPreferredWidth(90);
		table_1.setFont(new Font("Tahoma", Font.PLAIN, 16));
		table_1.setRowHeight(20);
		table_1.getTableHeader().setFont(new Font("Tahoma", Font.PLAIN, 16));
		scrollPane_1.setViewportView(table_1);
		
		DefaultTableCellRenderer rightRenderer_1 = new DefaultTableCellRenderer();		
		rightRenderer_1.setHorizontalAlignment(SwingConstants.CENTER);
		for(int i = 0; i < table_1.getColumnCount(); i++)
		{
			table_1.getColumnModel().getColumn(i).setCellRenderer(rightRenderer_1);
		}
				
		/**
		 * Ret Ansat
		 */
		
		btnRetAnsat = new JButton("Ret");
		btnRetAnsat.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				int medarbejderNr = (int) table_1.getValueAt(0, 0);
				String navn = table_1.getValueAt(0, 1).toString();
				String adresse = table_1.getValueAt(0, 2).toString();
				String postnr = table_1.getValueAt(0, 3).toString();
				String by = table_1.getValueAt(0, 4).toString();
				String tlf = table_1.getValueAt(0, 5).toString();
				String email = table_1.getValueAt(0, 6).toString();
				
				pCtr.findAnsatViaTlf(tlf).setMedarbejderNr(medarbejderNr);
				pCtr.findAnsat(medarbejderNr).setNavn(navn);
				pCtr.findAnsat(medarbejderNr).setAdresse(adresse);
				pCtr.findAnsat(medarbejderNr).setPostnr(postnr);
				pCtr.findAnsat(medarbejderNr).setBy(by);
				pCtr.findAnsat(medarbejderNr).setTlf(tlf);
				pCtr.findAnsat(medarbejderNr).setEmail(email);
				lblKunderettet.setVisible(true);
				save();				
			}
		});
		btnRetAnsat.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnRetAnsat.setBounds(339, 146, 150, 40);
		
		lblAnsatrettet = new JLabel("Medarbejderen er rettet");
		lblAnsatrettet.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblAnsatrettet.setBounds(356, 209, 176, 20);
	
		/**
		 * Slet Ansat
		 */
		
		btnSletAnsat = new JButton("Slet");
		btnSletAnsat.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				JFrame parent = new JFrame();
				String slet = "Slet ansat " + table_1.getModel().getValueAt(0, 1);
				int valg = JOptionPane.showConfirmDialog(parent, "Er du sikker?", slet, JOptionPane.YES_NO_OPTION);
				if(valg == 0)
				{
					lblAnsatslettet.setVisible(true);
					save();
				}
			}
		});
		btnSletAnsat.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnSletAnsat.setBounds(179, 146, 150, 40);
		
		lblAnsatslettet = new JLabel("Medarbejderen er slettet");
		lblAnsatslettet.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblAnsatslettet.setBounds(196, 209, 192, 20);
		
		/**
		 * Labels og textfields
		 */
		
		lblNavn = new JLabel("Navn");
		lblNavn.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblNavn.setBounds(25, 56, 61, 16);
		
		txtNavn = new JTextField();
		txtNavn.setBounds(200, 50, 134, 28);
		txtNavn.setColumns(10);
		
		lblAdresse = new JLabel("Adresse");
		lblAdresse.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblAdresse.setBounds(25, 84, 61, 16);
		
		txtAdresse = new JTextField();
		txtAdresse.setBounds(200, 78, 134, 28);
		txtAdresse.setColumns(10);
		
		lblPostnummer = new JLabel("Postnummer");
		lblPostnummer.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblPostnummer.setBounds(25, 112, 126, 16);

		txtPostnr = new JTextField();
		txtPostnr.setBounds(200, 106, 134, 28);
		txtPostnr.setColumns(10);
		
		lblBy = new JLabel("By");
		lblBy.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblBy.setBounds(25, 140, 61, 16);
		
		txtBy = new JTextField();
		txtBy.setBounds(200, 134, 134, 28);
		txtBy.setColumns(10);
		
		lblEmail = new JLabel("E-mail");
		lblEmail.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblEmail.setBounds(25, 196, 61, 16);
		
		txtEmail = new JTextField();
		txtEmail.setBounds(200, 190, 134, 28);
		txtEmail.setColumns(10);
		
		lblTelefonNummer = new JLabel("Telefonnummer");
		lblTelefonNummer.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblTelefonNummer.setBounds(25, 168, 126, 16);
		
		txtTlf = new JTextField();
		txtTlf.addFocusListener(new FocusAdapter() {
			@Override
			public void focusLost(FocusEvent arg0) {
				checkTlfnr();
			}
		});
		txtTlf.setBounds(200, 162, 134, 28);
		txtTlf.setColumns(10);
		
		lblTlffejl = new JLabel("Telefonnummer skal være tal!");
		lblTlffejl.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblTlffejl.setForeground(Color.BLACK);
		lblTlffejl.setBounds(344, 168, 196, 16);
		
		lblAnsatNrfejl = new JLabel("Medarbejdernummer skal være et tal!");
		lblAnsatNrfejl.setFont(new Font("Tahoma", Font.PLAIN, 13));
		lblAnsatNrfejl.setForeground(Color.BLACK);
		lblAnsatNrfejl.setBounds(344, 168, 196, 16);
	}
	
    public static PersonGUI getInstance()
    {
        if(pGUI == null)
        {
            pGUI = new PersonGUI();
        }
        return pGUI;
    }
	
	private void sletTabel()
	{
		int rowCount = model.getRowCount();
		for (int i = rowCount -1; i >= 0; i--) {
			model.removeRow(i);
		}	
	}
	
	private void sletTabel_1()
	{
		int rowCount = model_1.getRowCount();
		for (int i = rowCount -1; i >= 0; i--)
		{
			model_1.removeRow(i);
		}		
	}
	
    public String bruger()
    {
		String bruger; 
    	int login = Integer.parseInt(pCtr.findLoggetInd(getName()));
    	bruger = pCtr.findAnsat(login).getNavn();
		
		return bruger;
    }
    
    public Ansat getBruger()
    {
    	return pCtr.getBruger();
    }
    
    public void setBruger(Ansat a)
    {
    	pCtr.setBruger(a);
    }
	
	public Ansat findAnsat(int medarbejderNr)
	{
		return pCtr.findAnsat(medarbejderNr);
	}
    
	private void checkTlfnr() 
	{
		try
		{
			int tlfNr = Integer.parseInt(txtTlf.getText().trim());
		}
		catch(NumberFormatException e)
		{
			lblTlffejl.setVisible(true);
			txtTlf.setText("");
			txtTlf.requestFocus();
		}
	}
    
    private void checkMedarbejderNr()
    {
    	try
    	{
    		int medarbejderNr = Integer.parseInt(txtSgMedarbejderNr.getText().trim());
    	}
    	catch(NumberFormatException e)
    	{
    		lblAnsatNrfejl.setVisible(true);
    		txtSgMedarbejderNr.setText("");
    		txtSgMedarbejderNr.requestFocus();
    	}
    }
	
	private void FastKundeButtonChanged()
	{
			if(rdbtnFastKunde.isSelected())
				{
					lblKontoNummer.setVisible(true);
					txtKontonr.setVisible(true);
					lblKundegruppe.setVisible(true);
					cbKundegruppe.setVisible(true);
				}
			else
				{
					lblKontoNummer.setVisible(false);
					txtKontonr.setVisible(false);
				    lblKundegruppe.setVisible(false);
					cbKundegruppe.setVisible(false);
				}
	}
				
	/**
	* Method loadAnsatte
	*
	* Loads employees. This method is necessary to be called in the Main Menu.
	*/
	public void loadAnsatte() 
	{
	        try
	        {
	            pCtr.loadAnsat();
	        }
	        catch(ClassNotFoundException e)
	        {
	            System.out.println("Der skete en fejl under indlæsning af ansatte");
	        }
	        catch(IOException e)
	        {
	            System.out.println("Der skete en fejl under indlæsning af ansatte");
	        }
	        pCtr.medarbejderNoCounterCheck();
	}

	public void loadKunder()
	{
	        try
	        {
	            pCtr.loadKunde();
	        }
	        catch(ClassNotFoundException e)
	        {
	            System.out.println("Der skete en fejl under indlæsning af kunder");
	        }
	        catch(IOException e)
	        {
	            System.out.println("Der skete en fejl under indlæsning af kunder");
	        }
	        pCtr.kundeNoCounterCheck();
	}
	    
	/**
	 * Method kontrolLogin
	 *
	 * Calls the kontrolLogin method from the personcontroller. This takes a username and password as parameters.
	 * If the method couldn't find a employee it returns false and prints a message.
	 * 
	 * @param brugernavn Username
	 * @param password Password
	 * @return False if the employee with the given parameters couldn't be found.
	 */
	public boolean kontrolLogin(String brugernavn, String password)
	{   
	        try
	        {
	            return pCtr.kontrolLogin(brugernavn, password);
	        }
	        catch(IndexOutOfBoundsException e)
	        {
	            System.out.println("Medarbejder findes ikke");
	            return false;
	        }
	}
	    
	/**
	 * Method loggetInd
	 *
	 * Calls the findLoggetInd method from the personcontroller. It takes a username as a parameter.
	 * It returns the employeenumber of the person who is logged in at the moment.
	 * 
	 * @param brugernavn Username
	 * @return Employeenumber
	 */
	public String loggetInd(String brugernavn)
	{
	        return pCtr.findLoggetInd(brugernavn);
	}
	    
	public void save()
	{
	        try
	        {
	            pCtr.saveKunde();
	            pCtr.saveAnsat();
	        }
	        catch(IOException e)
	        {
	            System.out.println("Filen kunne ikke gemmes");
	        }
	        System.out.println("Filen er gemt");
	}
}

